[INFO] fetching crate mcp-guard 1.0.0...
[INFO] testing mcp-guard-1.0.0 against master#f9988fefd3add01f414f52b414308e7872622fee for pr-155114
[INFO] extracting crate mcp-guard 1.0.0 into /workspace/builds/worker-2-tc1/source
[INFO] started tweaking crates.io crate mcp-guard 1.0.0
[INFO] removed 0 missing tests
[INFO] finished tweaking crates.io crate mcp-guard 1.0.0
[INFO] tweaked toml for crates.io crate mcp-guard 1.0.0 written to /workspace/builds/worker-2-tc1/source/Cargo.toml
[INFO] validating manifest of crates.io crate mcp-guard 1.0.0 on toolchain f9988fefd3add01f414f52b414308e7872622fee
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+f9988fefd3add01f414f52b414308e7872622fee" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate mcp-guard 1.0.0 already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+f9988fefd3add01f414f52b414308e7872622fee" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded quote v1.0.42
[INFO] [stderr]   Downloaded url v2.5.7
[INFO] [stderr]   Downloaded wiremock v0.6.5
[INFO] [stderr]   Downloaded tinystr v0.8.2
[INFO] [stderr]   Downloaded proc-macro2 v1.0.103
[INFO] [stderr]   Downloaded writeable v0.6.2
[INFO] [stderr]   Downloaded yoke-derive v0.8.1
[INFO] [stderr]   Downloaded wasm-bindgen-macro v0.2.106
[INFO] [stderr]   Downloaded wasm-bindgen-shared v0.2.106
[INFO] [stderr]   Downloaded zerofrom v0.1.6
[INFO] [stderr]   Downloaded potential_utf v0.1.4
[INFO] [stderr]   Downloaded tokio-test v0.4.4
[INFO] [stderr]   Downloaded zerofrom-derive v0.1.6
[INFO] [stderr]   Downloaded signal-hook-registry v1.4.7
[INFO] [stderr]   Downloaded yoke v0.8.1
[INFO] [stderr]   Downloaded litemap v0.8.1
[INFO] [stderr]   Downloaded ipnet v2.11.0
[INFO] [stderr]   Downloaded wasm-bindgen-futures v0.4.56
[INFO] [stderr]   Downloaded idna_adapter v1.2.1
[INFO] [stderr]   Downloaded find-msvc-tools v0.1.5
[INFO] [stderr]   Downloaded zerovec-derive v0.11.2
[INFO] [stderr]   Downloaded urlencoding v2.1.3
[INFO] [stderr]   Downloaded wasm-bindgen v0.2.106
[INFO] [stderr]   Downloaded icu_locale_core v2.1.1
[INFO] [stderr]   Downloaded getrandom v0.2.16
[INFO] [stderr]   Downloaded rand_core v0.9.3
[INFO] [stderr]   Downloaded rustls-native-certs v0.8.2
[INFO] [stderr]   Downloaded wasm-streams v0.4.2
[INFO] [stderr]   Downloaded js-sys v0.3.83
[INFO] [stderr]   Downloaded schannel v0.1.28
[INFO] [stderr]   Downloaded serde_path_to_error v0.1.20
[INFO] [stderr]   Downloaded matchit v0.7.3
[INFO] [stderr]   Downloaded sketches-ddsketch v0.2.2
[INFO] [stderr]   Downloaded no-std-compat v0.4.1
[INFO] [stderr]   Downloaded const-random v0.1.18
[INFO] [stderr]   Downloaded const-random-macro v0.1.16
[INFO] [stderr]   Downloaded icu_provider v2.1.1
[INFO] [stderr]   Downloaded icu_normalizer v2.1.1
[INFO] [stderr]   Downloaded icu_normalizer_data v2.1.1
[INFO] [stderr]   Downloaded deadpool v0.12.3
[INFO] [stderr]   Downloaded wasm-bindgen-macro-support v0.2.106
[INFO] [stderr]   Downloaded cmake v0.1.56
[INFO] [stderr]   Downloaded dlv-list v0.5.2
[INFO] [stderr]   Downloaded icu_collections v2.1.1
[INFO] [stderr]   Downloaded hyper-util v0.1.19
[INFO] [stderr]   Downloaded rustls-pki-types v1.13.1
[INFO] [stderr]   Downloaded security-framework-sys v2.15.0
[INFO] [stderr]   Downloaded prost v0.13.5
[INFO] [stderr]   Downloaded simple_asn1 v0.6.3
[INFO] [stderr]   Downloaded pem v3.0.6
[INFO] [stderr]   Downloaded hashlink v0.8.4
[INFO] [stderr]   Downloaded arraydeque v0.5.1
[INFO] [stderr]   Downloaded rust-ini v0.20.0
[INFO] [stderr]   Downloaded icu_properties v2.1.2
[INFO] [stderr]   Downloaded zerotrie v0.2.3
[INFO] [stderr]   Downloaded tracing-core v0.1.35
[INFO] [stderr]   Downloaded hyper-rustls v0.27.7
[INFO] [stderr]   Downloaded zerocopy-derive v0.8.31
[INFO] [stderr]   Downloaded security-framework v3.5.1
[INFO] [stderr]   Downloaded metrics-exporter-prometheus v0.15.3
[INFO] [stderr]   Downloaded simd-adler32 v0.3.8
[INFO] [stderr]   Downloaded pathdiff v0.2.3
[INFO] [stderr]   Downloaded assert_cmd v2.1.1
[INFO] [stderr]   Downloaded tracing v0.1.43
[INFO] [stderr]   Downloaded cc v1.2.49
[INFO] [stderr]   Downloaded tinyvec v1.10.0
[INFO] [stderr]   Downloaded typenum v1.19.0
[INFO] [stderr]   Downloaded metrics-util v0.17.0
[INFO] [stderr]   Downloaded config v0.14.1
[INFO] [stderr]   Downloaded zerovec v0.11.5
[INFO] [stderr]   Downloaded rustls-webpki v0.103.8
[INFO] [stderr]   Downloaded oauth2 v5.0.0
[INFO] [stderr]   Downloaded rand v0.9.2
[INFO] [stderr]   Downloaded tower v0.4.13
[INFO] [stderr]   Downloaded tokio-util v0.7.17
[INFO] [stderr]   Downloaded iri-string v0.7.9
[INFO] [stderr]   Downloaded opentelemetry-otlp v0.27.0
[INFO] [stderr]   Downloaded tonic v0.12.3
[INFO] [stderr]   Downloaded axum-core v0.4.5
[INFO] [stderr]   Downloaded indexmap v2.12.1
[INFO] [stderr]   Downloaded reqwest v0.12.25
[INFO] [stderr]   Downloaded tower-http v0.6.8
[INFO] [stderr]   Downloaded prost-derive v0.13.5
[INFO] [stderr]   Downloaded nonzero_ext v0.3.0
[INFO] [stderr]   Downloaded ordered-multimap v0.7.3
[INFO] [stderr]   Downloaded pest_meta v2.8.4
[INFO] [stderr]   Downloaded hyper v1.8.1
[INFO] [stderr]   Downloaded mcp-guard-core v1.0.0
[INFO] [stderr]   Downloaded axum-macros v0.4.2
[INFO] [stderr]   Downloaded quanta v0.12.6
[INFO] [stderr]   Downloaded raw-cpuid v11.6.0
[INFO] [stderr]   Downloaded metrics v0.23.1
[INFO] [stderr]   Downloaded jsonwebtoken v9.3.1
[INFO] [stderr]   Downloaded tiny-keccak v2.0.2
[INFO] [stderr]   Downloaded icu_properties_data v2.1.2
[INFO] [stderr]   Downloaded opentelemetry v0.27.1
[INFO] [stderr]   Downloaded governor v0.6.3
[INFO] [stderr]   Downloaded spinning_top v0.3.0
[INFO] [stderr]   Downloaded ron v0.8.1
[INFO] [stderr]   Downloaded pest_generator v2.8.4
[INFO] [stderr]   Downloaded clap v4.5.53
[INFO] [stderr]   Downloaded clap_lex v0.7.6
[INFO] [stderr]   Downloaded aws-lc-rs v1.15.1
[INFO] [stderr]   Downloaded tracing-opentelemetry v0.28.0
[INFO] [stderr]   Downloaded opentelemetry-proto v0.27.0
[INFO] [stderr]   Downloaded flate2 v1.1.5
[INFO] [stderr]   Downloaded pest_derive v2.8.4
[INFO] [stderr]   Downloaded yaml-rust2 v0.8.1
[INFO] [stderr]   Downloaded syn v2.0.111
[INFO] [stderr]   Downloaded quinn-proto v0.11.13
[INFO] [stderr]   Downloaded opentelemetry_sdk v0.27.1
[INFO] [stderr]   Downloaded portable-atomic v1.11.1
[INFO] [stderr]   Downloaded webpki-roots v1.0.4
[INFO] [stderr]   Downloaded zerocopy v0.8.31
[INFO] [stderr]   Downloaded axum v0.7.9
[INFO] [stderr]   Downloaded clap_builder v4.5.53
[INFO] [stderr]   Downloaded pest v2.8.4
[INFO] [stderr]   Downloaded rustls v0.23.35
[INFO] [stderr]   Downloaded web-sys v0.3.83
[INFO] [stderr]   Downloaded libc v0.2.178
[INFO] [stderr]   Downloaded tokio v1.48.0
[INFO] [stderr]   Downloaded aws-lc-sys v0.34.0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+f9988fefd3add01f414f52b414308e7872622fee" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] f1a71cfa4ba3b253b43bca108d45163b898095b0de75c113f9820921405e454e
[INFO] running `Command { std: "docker" "start" "-a" "f1a71cfa4ba3b253b43bca108d45163b898095b0de75c113f9820921405e454e", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "f1a71cfa4ba3b253b43bca108d45163b898095b0de75c113f9820921405e454e", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "f1a71cfa4ba3b253b43bca108d45163b898095b0de75c113f9820921405e454e", kill_on_drop: false }`
[INFO] [stdout] f1a71cfa4ba3b253b43bca108d45163b898095b0de75c113f9820921405e454e
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+f9988fefd3add01f414f52b414308e7872622fee" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 33ee757b4d6b735045d263a97cc6c7255f9055bd95a949372fc7b78cfb6fdbfb
[INFO] running `Command { std: "docker" "start" "-a" "33ee757b4d6b735045d263a97cc6c7255f9055bd95a949372fc7b78cfb6fdbfb", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.103
[INFO] [stderr]    Compiling quote v1.0.42
[INFO] [stderr]    Compiling libc v0.2.178
[INFO] [stderr]    Compiling cfg-if v1.0.4
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling scopeguard v1.2.0
[INFO] [stderr]    Compiling bytes v1.11.0
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling lock_api v0.4.14
[INFO] [stderr]    Compiling log v0.4.29
[INFO] [stderr]    Compiling zerocopy v0.8.31
[INFO] [stderr]    Compiling tracing-core v0.1.35
[INFO] [stderr]    Compiling version_check v0.9.5
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling futures-channel v0.3.31
[INFO] [stderr]    Compiling futures-task v0.3.31
[INFO] [stderr]    Compiling futures-io v0.3.31
[INFO] [stderr]    Compiling shlex v1.3.0
[INFO] [stderr]    Compiling find-msvc-tools v0.1.5
[INFO] [stderr]    Compiling hashbrown v0.16.1
[INFO] [stderr]    Compiling syn v2.0.111
[INFO] [stderr]    Compiling http v1.4.0
[INFO] [stderr]    Compiling autocfg v1.5.0
[INFO] [stderr]    Compiling socket2 v0.6.1
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling mio v1.1.1
[INFO] [stderr]    Compiling signal-hook-registry v1.4.7
[INFO] [stderr]    Compiling getrandom v0.2.16
[INFO] [stderr]    Compiling jobserver v0.1.34
[INFO] [stderr]    Compiling indexmap v2.12.1
[INFO] [stderr]    Compiling cc v1.2.49
[INFO] [stderr]    Compiling stable_deref_trait v1.2.1
[INFO] [stderr]    Compiling http-body v1.0.1
[INFO] [stderr]    Compiling ryu v1.0.20
[INFO] [stderr]    Compiling ahash v0.8.12
[INFO] [stderr]    Compiling serde_json v1.0.145
[INFO] [stderr]    Compiling dunce v1.0.5
[INFO] [stderr]    Compiling fs_extra v1.3.0
[INFO] [stderr]    Compiling zeroize v1.8.2
[INFO] [stderr]    Compiling rand_core v0.6.4
[INFO] [stderr]    Compiling aws-lc-rs v1.15.1
[INFO] [stderr]    Compiling ipnet v2.11.0
[INFO] [stderr]    Compiling allocator-api2 v0.2.21
[INFO] [stderr]    Compiling rustls-pki-types v1.13.1
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling http-body-util v0.1.3
[INFO] [stderr]    Compiling bitflags v2.10.0
[INFO] [stderr]    Compiling rand_chacha v0.3.1
[INFO] [stderr]    Compiling hashbrown v0.14.5
[INFO] [stderr]    Compiling cmake v0.1.56
[INFO] [stderr]    Compiling sync_wrapper v1.0.2
[INFO] [stderr]    Compiling writeable v0.6.2
[INFO] [stderr]    Compiling typenum v1.19.0
[INFO] [stderr]    Compiling litemap v0.8.1
[INFO] [stderr]    Compiling untrusted v0.9.0
[INFO] [stderr]    Compiling subtle v2.6.1
[INFO] [stderr]    Compiling crunchy v0.2.4
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling rand v0.8.5
[INFO] [stderr]    Compiling form_urlencoded v1.2.2
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling generic-array v0.14.7
[INFO] [stderr]    Compiling tiny-keccak v2.0.2
[INFO] [stderr]    Compiling icu_properties_data v2.1.2
[INFO] [stderr]    Compiling icu_normalizer_data v2.1.1
[INFO] [stderr]    Compiling crossbeam-utils v0.8.21
[INFO] [stderr]    Compiling rustversion v1.0.22
[INFO] [stderr]    Compiling rustls v0.23.35
[INFO] [stderr]    Compiling aws-lc-sys v0.34.0
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]    Compiling anyhow v1.0.100
[INFO] [stderr]    Compiling indexmap v1.9.3
[INFO] [stderr]    Compiling ucd-trie v0.1.7
[INFO] [stderr]    Compiling once_cell v1.21.3
[INFO] [stderr]    Compiling getrandom v0.3.4
[INFO] [stderr]    Compiling itertools v0.14.0
[INFO] [stderr]    Compiling const-random-macro v0.1.16
[INFO] [stderr]    Compiling pest v2.8.4
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling serde_path_to_error v0.1.20
[INFO] [stderr]    Compiling aho-corasick v1.1.4
[INFO] [stderr]    Compiling openssl-probe v0.1.6
[INFO] [stderr]    Compiling hashbrown v0.12.3
[INFO] [stderr]    Compiling regex-syntax v0.8.8
[INFO] [stderr]    Compiling rustls-native-certs v0.8.2
[INFO] [stderr]    Compiling pest_meta v2.8.4
[INFO] [stderr]    Compiling block-buffer v0.10.4
[INFO] [stderr]    Compiling crypto-common v0.1.7
[INFO] [stderr]    Compiling const-random v0.1.18
[INFO] [stderr]    Compiling raw-cpuid v11.6.0
[INFO] [stderr]    Compiling webpki-roots v1.0.4
[INFO] [stderr]    Compiling powerfmt v0.2.0
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling tokio-macros v2.6.0
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling tokio v1.48.0
[INFO] [stderr]    Compiling futures-macro v0.3.31
[INFO] [stderr]    Compiling tracing v0.1.43
[INFO] [stderr]    Compiling zerofrom-derive v0.1.6
[INFO] [stderr]    Compiling futures-util v0.3.31
[INFO] [stderr]    Compiling yoke-derive v0.8.1
[INFO] [stderr]    Compiling zerovec-derive v0.11.2
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]    Compiling zerofrom v0.1.6
[INFO] [stderr]    Compiling yoke v0.8.1
[INFO] [stderr]    Compiling zerotrie v0.2.3
[INFO] [stderr]    Compiling async-trait v0.1.89
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling zerovec v0.11.5
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling pin-project-internal v1.1.10
[INFO] [stderr]    Compiling regex-automata v0.4.13
[INFO] [stderr]    Compiling tinystr v0.8.2
[INFO] [stderr]    Compiling icu_locale_core v2.1.1
[INFO] [stderr]    Compiling potential_utf v0.1.4
[INFO] [stderr]    Compiling icu_collections v2.1.1
[INFO] [stderr]    Compiling opentelemetry v0.27.1
[INFO] [stderr]    Compiling futures-executor v0.3.31
[INFO] [stderr]    Compiling axum-core v0.4.5
[INFO] [stderr]    Compiling icu_provider v2.1.1
[INFO] [stderr]    Compiling icu_properties v2.1.2
[INFO] [stderr]    Compiling icu_normalizer v2.1.1
[INFO] [stderr]    Compiling pin-project v1.1.10
[INFO] [stderr]    Compiling async-stream-impl v0.3.6
[INFO] [stderr]    Compiling axum-macros v0.4.2
[INFO] [stderr]    Compiling prost-derive v0.13.5
[INFO] [stderr]    Compiling time-core v0.1.6
[INFO] [stderr]    Compiling utf8parse v0.2.2
[INFO] [stderr]    Compiling utf8_iter v1.0.4
[INFO] [stderr]    Compiling num-conv v0.1.0
[INFO] [stderr]    Compiling tokio-util v0.7.17
[INFO] [stderr]    Compiling h2 v0.4.12
[INFO] [stderr]    Compiling tower v0.5.2
[INFO] [stderr]    Compiling tokio-stream v0.1.17
[INFO] [stderr]    Compiling idna_adapter v1.2.1
[INFO] [stderr]    Compiling glob v0.3.3
[INFO] [stderr]    Compiling thiserror v2.0.17
[INFO] [stderr]    Compiling matchit v0.7.3
[INFO] [stderr]    Compiling opentelemetry_sdk v0.27.1
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling prost v0.13.5
[INFO] [stderr]    Compiling tower v0.4.13
[INFO] [stderr]    Compiling time-macros v0.2.24
[INFO] [stderr]    Compiling anstyle-parse v0.2.7
[INFO] [stderr]    Compiling async-stream v0.3.6
[INFO] [stderr]    Compiling serde_spanned v0.6.9
[INFO] [stderr]    Compiling toml_datetime v0.6.11
[INFO] [stderr]    Compiling quanta v0.12.6
[INFO] [stderr]    Compiling deranged v0.5.5
[INFO] [stderr]    Compiling thiserror-impl v2.0.17
[INFO] [stderr]    Compiling pest_generator v2.8.4
[INFO] [stderr]    Compiling uuid v1.19.0
[INFO] [stderr]    Compiling dlv-list v0.5.2
[INFO] [stderr]    Compiling digest v0.10.7
[INFO] [stderr]    Compiling num-integer v0.1.46
[INFO] [stderr]    Compiling socket2 v0.5.10
[INFO] [stderr]    Compiling colorchoice v1.0.4
[INFO] [stderr]    Compiling is_terminal_polyfill v1.70.2
[INFO] [stderr]    Compiling winnow v0.7.14
[INFO] [stderr]    Compiling anstyle-query v1.1.5
[INFO] [stderr]    Compiling anstyle v1.0.13
[INFO] [stderr]    Compiling crc32fast v1.5.0
[INFO] [stderr]    Compiling iri-string v0.7.9
[INFO] [stderr]    Compiling toml_write v0.1.2
[INFO] [stderr]    Compiling portable-atomic v1.11.1
[INFO] [stderr]    Compiling anstream v0.6.21
[INFO] [stderr]    Compiling time v0.3.44
[INFO] [stderr]    Compiling num-bigint v0.4.6
[INFO] [stderr]    Compiling pest_derive v2.8.4
[INFO] [stderr]    Compiling ordered-multimap v0.7.3
[INFO] [stderr]    Compiling hyper v1.8.1
[INFO] [stderr]    Compiling toml_edit v0.22.27
[INFO] [stderr]    Compiling tower-http v0.6.8
[INFO] [stderr]    Compiling url v2.5.7
[INFO] [stderr]    Compiling matchers v0.2.0
[INFO] [stderr]    Compiling hyper-util v0.1.19
[INFO] [stderr]    Compiling tracing-serde v0.2.0
[INFO] [stderr]    Compiling crossbeam-epoch v0.9.18
[INFO] [stderr]    Compiling hashlink v0.8.4
[INFO] [stderr]    Compiling metrics v0.23.1
[INFO] [stderr]    Compiling num_cpus v1.17.0
[INFO] [stderr]    Compiling tracing-log v0.2.0
[INFO] [stderr]    Compiling thread_local v1.1.9
[INFO] [stderr]    Compiling encoding_rs v0.8.35
[INFO] [stderr]    Compiling sketches-ddsketch v0.2.2
[INFO] [stderr]    Compiling iana-time-zone v0.1.64
[INFO] [stderr]    Compiling nu-ansi-term v0.50.3
[INFO] [stderr]    Compiling unicode-segmentation v1.12.0
[INFO] [stderr]    Compiling clap_lex v0.7.6
[INFO] [stderr]    Compiling cpufeatures v0.2.17
[INFO] [stderr]    Compiling adler2 v2.0.1
[INFO] [stderr]    Compiling base64 v0.21.7
[INFO] [stderr]    Compiling arraydeque v0.5.1
[INFO] [stderr]    Compiling strsim v0.11.1
[INFO] [stderr]    Compiling hyper-timeout v0.5.2
[INFO] [stderr]    Compiling axum v0.7.9
[INFO] [stderr]    Compiling minimal-lexical v0.2.1
[INFO] [stderr]    Compiling simd-adler32 v0.3.8
[INFO] [stderr]    Compiling clap_builder v4.5.53
[INFO] [stderr]    Compiling nom v7.1.3
[INFO] [stderr]    Compiling yaml-rust2 v0.8.1
[INFO] [stderr]    Compiling miniz_oxide v0.8.9
[INFO] [stderr]    Compiling ron v0.8.1
[INFO] [stderr]    Compiling convert_case v0.6.0
[INFO] [stderr]    Compiling toml v0.8.23
[INFO] [stderr]    Compiling sha2 v0.10.9
[INFO] [stderr]    Compiling clap_derive v4.5.49
[INFO] [stderr]    Compiling tracing-subscriber v0.3.22
[INFO] [stderr]    Compiling chrono v0.4.42
[INFO] [stderr]    Compiling metrics-util v0.17.0
[INFO] [stderr]    Compiling simple_asn1 v0.6.3
[INFO] [stderr]    Compiling rust-ini v0.20.0
[INFO] [stderr]    Compiling json5 v0.4.1
[INFO] [stderr]    Compiling futures v0.3.31
[INFO] [stderr]    Compiling dashmap v5.5.3
[INFO] [stderr]    Compiling pem v3.0.6
[INFO] [stderr]    Compiling spinning_top v0.3.0
[INFO] [stderr]    Compiling pathdiff v0.2.3
[INFO] [stderr]    Compiling no-std-compat v0.4.1
[INFO] [stderr]    Compiling unsafe-libyaml v0.2.11
[INFO] [stderr]    Compiling futures-timer v3.0.3
[INFO] [stderr]    Compiling nonzero_ext v0.3.0
[INFO] [stderr]    Compiling jsonwebtoken v9.3.1
[INFO] [stderr]    Compiling governor v0.6.3
[INFO] [stderr]    Compiling config v0.14.1
[INFO] [stderr]    Compiling flate2 v1.1.5
[INFO] [stderr]    Compiling tonic v0.12.3
[INFO] [stderr]    Compiling serde_yaml v0.9.34+deprecated
[INFO] [stderr]    Compiling clap v4.5.53
[INFO] [stderr]    Compiling tracing-opentelemetry v0.28.0
[INFO] [stderr]    Compiling hmac v0.12.1
[INFO] [stderr]    Compiling regex v1.12.2
[INFO] [stderr]    Compiling urlencoding v2.1.3
[INFO] [stderr]    Compiling opentelemetry-proto v0.27.0
[INFO] [stderr]    Compiling opentelemetry-otlp v0.27.0
[INFO] [stderr]    Compiling rustls-webpki v0.103.8
[INFO] [stderr]    Compiling tokio-rustls v0.26.4
[INFO] [stderr]    Compiling hyper-rustls v0.27.7
[INFO] [stderr]    Compiling reqwest v0.12.25
[INFO] [stderr]    Compiling metrics-exporter-prometheus v0.15.3
[INFO] [stderr]    Compiling oauth2 v5.0.0
[INFO] [stderr]    Compiling mcp-guard-core v1.0.0
[INFO] [stderr]    Compiling mcp-guard v1.0.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unexpected `cfg` condition value: `pro`
[INFO] [stdout]    --> src/main.rs:653:11
[INFO] [stdout]     |
[INFO] [stdout] 653 |     #[cfg(feature = "pro")]
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`
[INFO] [stdout]     = help: consider adding `pro` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout]     = note: `#[warn(unexpected_cfgs)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `enterprise`
[INFO] [stdout]    --> src/main.rs:704:11
[INFO] [stdout]     |
[INFO] [stdout] 704 |     #[cfg(feature = "enterprise")]
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`
[INFO] [stdout]     = help: consider adding `enterprise` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 5m 31s
[INFO] running `Command { std: "docker" "inspect" "33ee757b4d6b735045d263a97cc6c7255f9055bd95a949372fc7b78cfb6fdbfb", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "33ee757b4d6b735045d263a97cc6c7255f9055bd95a949372fc7b78cfb6fdbfb", kill_on_drop: false }`
[INFO] [stdout] 33ee757b4d6b735045d263a97cc6c7255f9055bd95a949372fc7b78cfb6fdbfb
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+f9988fefd3add01f414f52b414308e7872622fee" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] b994798fe15503ae38bc750ec98dc96bd1cc7c57605477c25ab1b00c96465315
[INFO] running `Command { std: "docker" "start" "-a" "b994798fe15503ae38bc750ec98dc96bd1cc7c57605477c25ab1b00c96465315", kill_on_drop: false }`
[INFO] [stderr]    Compiling tokio v1.48.0
[INFO] [stderr]    Compiling bitflags v2.10.0
[INFO] [stderr]    Compiling predicates-core v1.0.9
[INFO] [stderr]    Compiling rustix v1.1.2
[INFO] [stderr]    Compiling float-cmp v0.10.0
[INFO] [stderr]    Compiling normalize-line-endings v0.3.0
[INFO] [stderr]    Compiling deadpool-runtime v0.1.4
[INFO] [stderr]    Compiling linux-raw-sys v0.11.0
[INFO] [stderr]    Compiling termtree v0.5.1
[INFO] [stderr]    Compiling raw-cpuid v11.6.0
[INFO] [stderr]    Compiling ron v0.8.1
[INFO] [stderr]    Compiling difflib v0.4.0
[INFO] [stderr]    Compiling assert_cmd v2.1.1
[INFO] [stderr]    Compiling bstr v1.12.1
[INFO] [stderr]    Compiling predicates-tree v1.0.12
[INFO] [stderr]    Compiling assert-json-diff v2.0.2
[INFO] [stderr]    Compiling wait-timeout v0.2.1
[INFO] [stderr]    Compiling predicates v3.1.3
[INFO] [stderr]    Compiling fastrand v2.3.0
[INFO] [stderr]    Compiling config v0.14.1
[INFO] [stderr]    Compiling quanta v0.12.6
[INFO] [stderr]    Compiling metrics-util v0.17.0
[INFO] [stderr]    Compiling governor v0.6.3
[INFO] [stderr]    Compiling tempfile v3.23.0
[INFO] [stderr]    Compiling tokio-util v0.7.17
[INFO] [stderr]    Compiling tokio-stream v0.1.17
[INFO] [stderr]    Compiling tokio-rustls v0.26.4
[INFO] [stderr]    Compiling deadpool v0.12.3
[INFO] [stderr]    Compiling h2 v0.4.12
[INFO] [stderr]    Compiling tower v0.5.2
[INFO] [stderr]    Compiling tower v0.4.13
[INFO] [stderr]    Compiling opentelemetry_sdk v0.27.1
[INFO] [stderr]    Compiling tokio-test v0.4.4
[INFO] [stderr]    Compiling tower-http v0.6.8
[INFO] [stderr]    Compiling tracing-opentelemetry v0.28.0
[INFO] [stderr]    Compiling hyper v1.8.1
[INFO] [stderr]    Compiling hyper-util v0.1.19
[INFO] [stderr]    Compiling hyper-rustls v0.27.7
[INFO] [stderr]    Compiling hyper-timeout v0.5.2
[INFO] [stderr]    Compiling axum v0.7.9
[INFO] [stderr]    Compiling wiremock v0.6.5
[INFO] [stderr]    Compiling reqwest v0.12.25
[INFO] [stderr]    Compiling metrics-exporter-prometheus v0.15.3
[INFO] [stderr]    Compiling oauth2 v5.0.0
[INFO] [stderr]    Compiling tonic v0.12.3
[INFO] [stderr]    Compiling opentelemetry-proto v0.27.0
[INFO] [stderr]    Compiling opentelemetry-otlp v0.27.0
[INFO] [stderr]    Compiling mcp-guard-core v1.0.0
[INFO] [stderr]    Compiling mcp-guard v1.0.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unexpected `cfg` condition value: `enterprise`
[INFO] [stdout]  --> tests/routing_tests.rs:6:8
[INFO] [stdout]   |
[INFO] [stdout] 6 | #![cfg(feature = "enterprise")]
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: expected values for `feature` are: `default`
[INFO] [stdout]   = help: consider adding `enterprise` as a feature in `Cargo.toml`
[INFO] [stdout]   = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout]   = note: `#[warn(unexpected_cfgs)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Stdio`
[INFO] [stdout]  --> tests/common/mod.rs:2:29
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::process::{Command, Stdio};
[INFO] [stdout]   |                             ^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Stdio`
[INFO] [stdout]  --> tests/common/mod.rs:2:29
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::process::{Command, Stdio};
[INFO] [stdout]   |                             ^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `pro`
[INFO] [stdout]    --> src/main.rs:653:11
[INFO] [stdout]     |
[INFO] [stdout] 653 |     #[cfg(feature = "pro")]
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`
[INFO] [stdout]     = help: consider adding `pro` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout]     = note: `#[warn(unexpected_cfgs)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `enterprise`
[INFO] [stdout]    --> src/main.rs:704:11
[INFO] [stdout]     |
[INFO] [stdout] 704 |     #[cfg(feature = "enterprise")]
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`
[INFO] [stdout]     = help: consider adding `enterprise` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `name`
[INFO] [stdout]   --> tests/common/mod.rs:37:18
[INFO] [stdout]    |
[INFO] [stdout] 37 | pub fn cargo_bin(name: &str) -> Command {
[INFO] [stdout]    |                  ^^^^ help: if this is intentional, prefix it with an underscore: `_name`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TestContext` is never constructed
[INFO] [stdout]  --> tests/common/mod.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct TestContext {
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `setup_test_context` is never used
[INFO] [stdout]   --> tests/common/mod.rs:11:14
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub async fn setup_test_context() -> TestContext {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_free_port` is never used
[INFO] [stdout]   --> tests/common/mod.rs:21:14
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub async fn get_free_port() -> u16 {
[INFO] [stdout]    |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `wait_for_server` is never used
[INFO] [stdout]   --> tests/common/mod.rs:26:14
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub async fn wait_for_server(port: u16) -> bool {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `cargo_bin` is never used
[INFO] [stdout]   --> tests/common/mod.rs:37:8
[INFO] [stdout]    |
[INFO] [stdout] 37 | pub fn cargo_bin(name: &str) -> Command {
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `pro`
[INFO] [stdout]    --> src/main.rs:653:11
[INFO] [stdout]     |
[INFO] [stdout] 653 |     #[cfg(feature = "pro")]
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`
[INFO] [stdout]     = help: consider adding `pro` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout]     = note: `#[warn(unexpected_cfgs)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `enterprise`
[INFO] [stdout]    --> src/main.rs:704:11
[INFO] [stdout]     |
[INFO] [stdout] 704 |     #[cfg(feature = "enterprise")]
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`
[INFO] [stdout]     = help: consider adding `enterprise` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `pro`
[INFO] [stdout]     --> src/main.rs:1146:11
[INFO] [stdout]      |
[INFO] [stdout] 1146 |     #[cfg(feature = "pro")]
[INFO] [stdout]      |           ^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = note: expected values for `feature` are: `default`
[INFO] [stdout]      = help: consider adding `pro` as a feature in `Cargo.toml`
[INFO] [stdout]      = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `enterprise`
[INFO] [stdout]     --> src/main.rs:1384:11
[INFO] [stdout]      |
[INFO] [stdout] 1384 |     #[cfg(feature = "enterprise")]
[INFO] [stdout]      |           ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = note: expected values for `feature` are: `default`
[INFO] [stdout]      = help: consider adding `enterprise` as a feature in `Cargo.toml`
[INFO] [stdout]      = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `pro`
[INFO] [stdout]     --> src/main.rs:1413:15
[INFO] [stdout]      |
[INFO] [stdout] 1413 |     #[cfg(not(feature = "pro"))]
[INFO] [stdout]      |               ^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = note: expected values for `feature` are: `default`
[INFO] [stdout]      = help: consider adding `pro` as a feature in `Cargo.toml`
[INFO] [stdout]      = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `enterprise`
[INFO] [stdout]     --> src/main.rs:1439:15
[INFO] [stdout]      |
[INFO] [stdout] 1439 |     #[cfg(not(feature = "enterprise"))]
[INFO] [stdout]      |               ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = note: expected values for `feature` are: `default`
[INFO] [stdout]      = help: consider adding `enterprise` as a feature in `Cargo.toml`
[INFO] [stdout]      = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> tests/server_tests.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::time::sleep`
[INFO] [stdout]  --> tests/server_tests.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tokio::time::sleep;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Stdio`
[INFO] [stdout]  --> tests/common/mod.rs:2:29
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::process::{Command, Stdio};
[INFO] [stdout]   |                             ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `assert_cmd::Command::cargo_bin`: incompatible with a custom cargo build-dir, see instead `cargo::cargo_bin_cmd!`
[INFO] [stdout]   --> tests/e2e_cli_tests.rs:12:14
[INFO] [stdout]    |
[INFO] [stdout] 12 |     Command::cargo_bin("mcp-guard").unwrap()
[INFO] [stdout]    |              ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `name`
[INFO] [stdout]   --> tests/common/mod.rs:37:18
[INFO] [stdout]    |
[INFO] [stdout] 37 | pub fn cargo_bin(name: &str) -> Command {
[INFO] [stdout]    |                  ^^^^ help: if this is intentional, prefix it with an underscore: `_name`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> tests/http_server_tests.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Stdio`
[INFO] [stdout]  --> tests/common/mod.rs:2:29
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::process::{Command, Stdio};
[INFO] [stdout]   |                             ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Stdio`
[INFO] [stdout]  --> tests/common/mod.rs:2:29
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::process::{Command, Stdio};
[INFO] [stdout]   |                             ^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TestContext` is never constructed
[INFO] [stdout]  --> tests/common/mod.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct TestContext {
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `setup_test_context` is never used
[INFO] [stdout]   --> tests/common/mod.rs:11:14
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub async fn setup_test_context() -> TestContext {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `name`
[INFO] [stdout]   --> tests/common/mod.rs:37:18
[INFO] [stdout]    |
[INFO] [stdout] 37 | pub fn cargo_bin(name: &str) -> Command {
[INFO] [stdout]    |                  ^^^^ help: if this is intentional, prefix it with an underscore: `_name`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TestContext` is never constructed
[INFO] [stdout]  --> tests/common/mod.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct TestContext {
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `setup_test_context` is never used
[INFO] [stdout]   --> tests/common/mod.rs:11:14
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub async fn setup_test_context() -> TestContext {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `name`
[INFO] [stdout]   --> tests/common/mod.rs:37:18
[INFO] [stdout]    |
[INFO] [stdout] 37 | pub fn cargo_bin(name: &str) -> Command {
[INFO] [stdout]    |                  ^^^^ help: if this is intentional, prefix it with an underscore: `_name`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `name`
[INFO] [stdout]   --> tests/common/mod.rs:37:18
[INFO] [stdout]    |
[INFO] [stdout] 37 | pub fn cargo_bin(name: &str) -> Command {
[INFO] [stdout]    |                  ^^^^ help: if this is intentional, prefix it with an underscore: `_name`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TestContext` is never constructed
[INFO] [stdout]  --> tests/common/mod.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct TestContext {
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `setup_test_context` is never used
[INFO] [stdout]   --> tests/common/mod.rs:11:14
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub async fn setup_test_context() -> TestContext {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `config_with_multiple_keys` is never used
[INFO] [stdout]   --> tests/http_server_tests.rs:78:4
[INFO] [stdout]    |
[INFO] [stdout] 78 | fn config_with_multiple_keys() -> String {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TestContext` is never constructed
[INFO] [stdout]  --> tests/common/mod.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct TestContext {
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `setup_test_context` is never used
[INFO] [stdout]   --> tests/common/mod.rs:11:14
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub async fn setup_test_context() -> TestContext {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `pro`
[INFO] [stdout]    --> tests/cli_tests.rs:129:7
[INFO] [stdout]     |
[INFO] [stdout] 129 | #[cfg(feature = "pro")]
[INFO] [stdout]     |       ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`
[INFO] [stdout]     = help: consider adding `pro` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout]     = note: `#[warn(unexpected_cfgs)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `pro`
[INFO] [stdout]    --> tests/cli_tests.rs:171:7
[INFO] [stdout]     |
[INFO] [stdout] 171 | #[cfg(feature = "pro")]
[INFO] [stdout]     |       ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`
[INFO] [stdout]     = help: consider adding `pro` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `pro`
[INFO] [stdout]    --> tests/cli_tests.rs:204:11
[INFO] [stdout]     |
[INFO] [stdout] 204 | #[cfg(not(feature = "pro"))]
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`
[INFO] [stdout]     = help: consider adding `pro` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `assert_cmd::Command`
[INFO] [stdout]  --> tests/cli_tests.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use assert_cmd::Command;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Stdio`
[INFO] [stdout]  --> tests/common/mod.rs:2:29
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::process::{Command, Stdio};
[INFO] [stdout]   |                             ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `name`
[INFO] [stdout]   --> tests/common/mod.rs:37:18
[INFO] [stdout]    |
[INFO] [stdout] 37 | pub fn cargo_bin(name: &str) -> Command {
[INFO] [stdout]    |                  ^^^^ help: if this is intentional, prefix it with an underscore: `_name`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TestContext` is never constructed
[INFO] [stdout]  --> tests/common/mod.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct TestContext {
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `setup_test_context` is never used
[INFO] [stdout]   --> tests/common/mod.rs:11:14
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub async fn setup_test_context() -> TestContext {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_free_port` is never used
[INFO] [stdout]   --> tests/common/mod.rs:21:14
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub async fn get_free_port() -> u16 {
[INFO] [stdout]    |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `wait_for_server` is never used
[INFO] [stdout]   --> tests/common/mod.rs:26:14
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub async fn wait_for_server(port: u16) -> bool {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_test_config_http` is never used
[INFO] [stdout]     --> src/main.rs:1005:8
[INFO] [stdout]      |
[INFO] [stdout] 1005 |     fn create_test_config_http(url: &str) -> Config {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Stdio`
[INFO] [stdout]  --> tests/common/mod.rs:2:29
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::process::{Command, Stdio};
[INFO] [stdout]   |                             ^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `name`
[INFO] [stdout]   --> tests/common/mod.rs:37:18
[INFO] [stdout]    |
[INFO] [stdout] 37 | pub fn cargo_bin(name: &str) -> Command {
[INFO] [stdout]    |                  ^^^^ help: if this is intentional, prefix it with an underscore: `_name`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TestContext` is never constructed
[INFO] [stdout]  --> tests/common/mod.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct TestContext {
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `setup_test_context` is never used
[INFO] [stdout]   --> tests/common/mod.rs:11:14
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub async fn setup_test_context() -> TestContext {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 2m 11s
[INFO] running `Command { std: "docker" "inspect" "b994798fe15503ae38bc750ec98dc96bd1cc7c57605477c25ab1b00c96465315", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "b994798fe15503ae38bc750ec98dc96bd1cc7c57605477c25ab1b00c96465315", kill_on_drop: false }`
[INFO] [stdout] b994798fe15503ae38bc750ec98dc96bd1cc7c57605477c25ab1b00c96465315
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+f9988fefd3add01f414f52b414308e7872622fee" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] c56a6c9c988d09b9ac8a9c986de86ebe8e4cc2ab98062fcb9702c1dc59642232
[INFO] running `Command { std: "docker" "start" "-a" "c56a6c9c988d09b9ac8a9c986de86ebe8e4cc2ab98062fcb9702c1dc59642232", kill_on_drop: false }`
[INFO] [stderr] warning: unexpected `cfg` condition value: `pro`
[INFO] [stderr]    --> src/main.rs:653:11
[INFO] [stderr]     |
[INFO] [stderr] 653 |     #[cfg(feature = "pro")]
[INFO] [stderr]     |           ^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: expected values for `feature` are: `default`
[INFO] [stderr]     = help: consider adding `pro` as a feature in `Cargo.toml`
[INFO] [stderr]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr]     = note: `#[warn(unexpected_cfgs)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `enterprise`
[INFO] [stderr]    --> src/main.rs:704:11
[INFO] [stderr]     |
[INFO] [stderr] 704 |     #[cfg(feature = "enterprise")]
[INFO] [stderr]     |           ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: expected values for `feature` are: `default`
[INFO] [stderr]     = help: consider adding `enterprise` as a feature in `Cargo.toml`
[INFO] [stderr]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: `mcp-guard` (bin "mcp-guard") generated 2 warnings
[INFO] [stderr] warning: unused import: `std::time::Duration`
[INFO] [stderr]  --> tests/http_server_tests.rs:8:5
[INFO] [stderr]   |
[INFO] [stderr] 8 | use std::time::Duration;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Stdio`
[INFO] [stderr]  --> tests/common/mod.rs:2:29
[INFO] [stderr]   |
[INFO] [stderr] 2 | use std::process::{Command, Stdio};
[INFO] [stderr]   |                             ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `name`
[INFO] [stderr]   --> tests/common/mod.rs:37:18
[INFO] [stderr]    |
[INFO] [stderr] 37 | pub fn cargo_bin(name: &str) -> Command {
[INFO] [stderr]    |                  ^^^^ help: if this is intentional, prefix it with an underscore: `_name`
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: function `config_with_multiple_keys` is never used
[INFO] [stderr]   --> tests/http_server_tests.rs:78:4
[INFO] [stderr]    |
[INFO] [stderr] 78 | fn config_with_multiple_keys() -> String {
[INFO] [stderr]    |    ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: struct `TestContext` is never constructed
[INFO] [stderr]  --> tests/common/mod.rs:6:12
[INFO] [stderr]   |
[INFO] [stderr] 6 | pub struct TestContext {
[INFO] [stderr]   |            ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `setup_test_context` is never used
[INFO] [stderr]   --> tests/common/mod.rs:11:14
[INFO] [stderr]    |
[INFO] [stderr] 11 | pub async fn setup_test_context() -> TestContext {
[INFO] [stderr]    |              ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `pro`
[INFO] [stderr]     --> src/main.rs:1146:11
[INFO] [stderr]      |
[INFO] [stderr] 1146 |     #[cfg(feature = "pro")]
[INFO] [stderr]      |           ^^^^^^^^^^^^^^^
[INFO] [stderr]      |
[INFO] [stderr]      = note: expected values for `feature` are: `default`
[INFO] [stderr]      = help: consider adding `pro` as a feature in `Cargo.toml`
[INFO] [stderr]      = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `enterprise`
[INFO] [stderr]     --> src/main.rs:1384:11
[INFO] [stderr]      |
[INFO] [stderr] 1384 |     #[cfg(feature = "enterprise")]
[INFO] [stderr]      |           ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]      |
[INFO] [stderr]      = note: expected values for `feature` are: `default`
[INFO] [stderr]      = help: consider adding `enterprise` as a feature in `Cargo.toml`
[INFO] [stderr]      = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `pro`
[INFO] [stderr]     --> src/main.rs:1413:15
[INFO] [stderr]      |
[INFO] [stderr] 1413 |     #[cfg(not(feature = "pro"))]
[INFO] [stderr]      |               ^^^^^^^^^^^^^^^
[INFO] [stderr]      |
[INFO] [stderr]      = note: expected values for `feature` are: `default`
[INFO] [stderr]      = help: consider adding `pro` as a feature in `Cargo.toml`
[INFO] [stderr]      = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `enterprise`
[INFO] [stderr]     --> src/main.rs:1439:15
[INFO] [stderr]      |
[INFO] [stderr] 1439 |     #[cfg(not(feature = "enterprise"))]
[INFO] [stderr]      |               ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]      |
[INFO] [stderr]      = note: expected values for `feature` are: `default`
[INFO] [stderr]      = help: consider adding `enterprise` as a feature in `Cargo.toml`
[INFO] [stderr]      = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: function `create_test_config_http` is never used
[INFO] [stderr]     --> src/main.rs:1005:8
[INFO] [stderr]      |
[INFO] [stderr] 1005 |     fn create_test_config_http(url: &str) -> Config {
[INFO] [stderr]      |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]      |
[INFO] [stderr]      = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Stdio`
[INFO] [stderr]  --> tests/common/mod.rs:2:29
[INFO] [stderr]   |
[INFO] [stderr] 2 | use std::process::{Command, Stdio};
[INFO] [stderr]   |                             ^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: struct `TestContext` is never constructed
[INFO] [stderr]  --> tests/common/mod.rs:6:12
[INFO] [stderr]   |
[INFO] [stderr] 6 | pub struct TestContext {
[INFO] [stderr]   |            ^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `pro`
[INFO] [stderr]    --> tests/cli_tests.rs:129:7
[INFO] [stderr]     |
[INFO] [stderr] 129 | #[cfg(feature = "pro")]
[INFO] [stderr]     |       ^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: expected values for `feature` are: `default`
[INFO] [stderr]     = help: consider adding `pro` as a feature in `Cargo.toml`
[INFO] [stderr]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr]     = note: `#[warn(unexpected_cfgs)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `pro`
[INFO] [stderr]    --> tests/cli_tests.rs:171:7
[INFO] [stderr]     |
[INFO] [stderr] 171 | #[cfg(feature = "pro")]
[INFO] [stderr]     |       ^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: expected values for `feature` are: `default`
[INFO] [stderr]     = help: consider adding `pro` as a feature in `Cargo.toml`
[INFO] [stderr]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `pro`
[INFO] [stderr]    --> tests/cli_tests.rs:204:11
[INFO] [stderr]     |
[INFO] [stderr] 204 | #[cfg(not(feature = "pro"))]
[INFO] [stderr]     |           ^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: expected values for `feature` are: `default`
[INFO] [stderr]     = help: consider adding `pro` as a feature in `Cargo.toml`
[INFO] [stderr]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `assert_cmd::Command`
[INFO] [stderr]  --> tests/cli_tests.rs:2:5
[INFO] [stderr]   |
[INFO] [stderr] 2 | use assert_cmd::Command;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: function `get_free_port` is never used
[INFO] [stderr]   --> tests/common/mod.rs:21:14
[INFO] [stderr]    |
[INFO] [stderr] 21 | pub async fn get_free_port() -> u16 {
[INFO] [stderr]    |              ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `wait_for_server` is never used
[INFO] [stderr]   --> tests/common/mod.rs:26:14
[INFO] [stderr]    |
[INFO] [stderr] 26 | pub async fn wait_for_server(port: u16) -> bool {
[INFO] [stderr]    |              ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `cargo_bin` is never used
[INFO] [stderr]   --> tests/common/mod.rs:37:8
[INFO] [stderr]    |
[INFO] [stderr] 37 | pub fn cargo_bin(name: &str) -> Command {
[INFO] [stderr]    |        ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated associated function `assert_cmd::Command::cargo_bin`: incompatible with a custom cargo build-dir, see instead `cargo::cargo_bin_cmd!`
[INFO] [stderr]   --> tests/e2e_cli_tests.rs:12:14
[INFO] [stderr]    |
[INFO] [stderr] 12 |     Command::cargo_bin("mcp-guard").unwrap()
[INFO] [stderr]    |              ^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(deprecated)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: `mcp-guard` (test "http_server_tests") generated 6 warnings (run `cargo fix --test "http_server_tests" -p mcp-guard` to apply 3 suggestions)
[INFO] [stderr] warning: `mcp-guard` (bin "mcp-guard" test) generated 7 warnings (2 duplicates)
[INFO] [stderr] warning: `mcp-guard` (test "mcp_handler_tests") generated 4 warnings (2 duplicates) (run `cargo fix --test "mcp_handler_tests" -p mcp-guard` to apply 1 suggestion)
[INFO] [stderr] warning: `mcp-guard` (test "rate_limit_tests") generated 4 warnings (4 duplicates)
[INFO] [stderr] warning: `mcp-guard` (test "cli_tests") generated 10 warnings (4 duplicates) (run `cargo fix --test "cli_tests" -p mcp-guard` to apply 1 suggestion)
[INFO] [stderr] warning: `mcp-guard` (test "auth_integration_tests") generated 4 warnings (4 duplicates)
[INFO] [stderr] warning: `mcp-guard` (test "transport_integration_tests") generated 7 warnings (6 duplicates)
[INFO] [stderr] warning: `mcp-guard` (test "e2e_cli_tests") generated 1 warning
[INFO] [stderr] warning: unexpected `cfg` condition value: `enterprise`
[INFO] [stderr]  --> tests/routing_tests.rs:6:8
[INFO] [stderr]   |
[INFO] [stderr] 6 | #![cfg(feature = "enterprise")]
[INFO] [stderr]   |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: expected values for `feature` are: `default`
[INFO] [stderr]   = help: consider adding `enterprise` as a feature in `Cargo.toml`
[INFO] [stderr]   = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr]   = note: `#[warn(unexpected_cfgs)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::time::Duration`
[INFO] [stderr]  --> tests/server_tests.rs:3:5
[INFO] [stderr]   |
[INFO] [stderr] 3 | use std::time::Duration;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::time::sleep`
[INFO] [stderr]  --> tests/server_tests.rs:4:5
[INFO] [stderr]   |
[INFO] [stderr] 4 | use tokio::time::sleep;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: `mcp-guard` (test "routing_tests") generated 1 warning
[INFO] [stderr] warning: `mcp-guard` (test "server_tests") generated 6 warnings (4 duplicates) (run `cargo fix --test "server_tests" -p mcp-guard` to apply 2 suggestions)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.63s
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/mcp_guard-e76821502c891255)
[INFO] [stdout] 
[INFO] [stdout] running 21 tests
[INFO] [stdout] test tests::test_bootstrap_invalid_config ... ok
[INFO] [stdout] test tests::test_check_http_upstream_server_error ... ok
[INFO] [stdout] test tests::test_check_http_upstream_success ... ok
[INFO] [stdout] test tests::test_check_sse_upstream_success ... ok
[INFO] [stdout] test tests::test_generate_config_toml ... ok
[INFO] [stdout] test tests::test_generate_config_yaml ... ok
[INFO] [stdout] test tests::test_bootstrap_with_api_key_auth ... ok
[INFO] [stdout] test tests::test_run_cli_keygen_no_extras ... ok
[INFO] [stdout] test tests::test_run_cli_validate_missing_config ... ok
[INFO] [stdout] test tests::test_run_cli_hash_key ... ok
[INFO] [stdout] test tests::test_run_cli_version ... ok
[INFO] [stdout] test tests::test_check_stdio_upstream_invalid_command ... ok
[INFO] [stdout] [2m2026-05-05T21:22:29.104708Z[0m [33m WARN[0m [2mmcp_guard_core::observability[0m[2m:[0m Failed to install global Prometheus recorder, using local recorder. Metrics will still be available but won't be globally accessible. [3merror[0m[2m=[0mfailed to install exporter as global recorder: attempted to set a recorder after the metrics system was already initialized
[INFO] [stdout] [2m2026-05-05T21:22:29.104830Z[0m [33m WARN[0m [2mmcp_guard[0m[2m:[0m No authentication providers configured - all requests will be rejected
[INFO] [stdout] [2m2026-05-05T21:22:29.104921Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/bin/echo
[INFO] [stdout] test tests::test_run_cli_check_upstream_missing_config ... ok
[INFO] [stdout] test tests::test_check_sse_upstream_no_content_type ... ok
[INFO] [stdout] test tests::test_run_cli_keygen ... ok
[INFO] [stdout] test tests::test_run_cli_validate_valid_config ... ok
[INFO] [stdout] test tests::test_tier_validation_http_requires_pro ... ok
[INFO] [stdout] test tests::test_tier_validation_multi_server_requires_enterprise ... ok
[INFO] [stdout] test tests::test_tier_validation_stdio_always_allowed ... ok
[INFO] [stdout] test tests::test_bootstrap_with_no_auth ... ok
[INFO] [stdout] test tests::test_bootstrap_with_multiple_auth_providers ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 21 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/auth_integration_tests.rs (/opt/rustwide/target/debug/deps/auth_integration_tests-6b5670ec13b14e82)
[INFO] [stdout] 
[INFO] [stdout] running 2 tests
[INFO] [stdout] [2m2026-05-05T21:22:29.276654Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling JWT authentication
[INFO] [stdout] [2m2026-05-05T21:22:29.276587Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (1 keys)
[INFO] [stdout] [2m2026-05-05T21:22:29.279194Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] [2m2026-05-05T21:22:29.279298Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:34319
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:40821
[INFO] [stdout] ✓ Auth:       JWT
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 25 req/s, burst 10
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:34319/health
[INFO] [stdout] 
[INFO] [stdout] ✓ Auth:       API Keys (1)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] [2m2026-05-05T21:22:29.284053Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:34319
[INFO] [stdout] ✓ Rate Limit: 25 req/s, burst 10
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:40821/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:29.284440Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:40821
[INFO] [stdout] [2m2026-05-05T21:22:29.301717Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:29.301605Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:29.306508Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m6 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:29.306592Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m6 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:29.309579Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:29.310213Z[0m [33m WARN[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Authentication failed [3merror_id[0m[2m=[0mad96b3fa-d5fb-414d-a00d-37b3eaa2aeff [3merror[0m[2m=[0mMissing authorization header
[INFO] [stdout] [2m2026-05-05T21:22:29.310795Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m401
[INFO] [stdout] [2m2026-05-05T21:22:29.311610Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:29.315440Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Authentication failed (detailed) [3merror[0m[2m=[0mInvalid API key
[INFO] [stdout] [2m2026-05-05T21:22:29.315561Z[0m [33m WARN[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Authentication failed [3merror_id[0m[2m=[0m776faa44-87ea-4092-849f-e858556184d0 [3merror[0m[2m=[0mInvalid API key
[INFO] [stdout] [2m2026-05-05T21:22:29.315772Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m4 ms [3mstatus[0m[2m=[0m401
[INFO] [stdout] test test_api_key_auth_failures ... ok
[INFO] [stdout] [2m2026-05-05T21:22:29.319125Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:29.434624Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m115 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:29.435987Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:29.436391Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Authentication failed (detailed) [3merror[0m[2m=[0mInvalid JWT: JWT validation failed: InvalidSignature
[INFO] [stderr]      Running tests/cli_tests.rs (/opt/rustwide/target/debug/deps/cli_tests-9cf7b2142e00cf5e)
[INFO] [stdout] [2m2026-05-05T21:22:29.436530Z[0m [33m WARN[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Authentication failed [3merror_id[0m[2m=[0m9ff50003-460f-4ea8-8edd-3012fa768881 [3merror[0m[2m=[0mInvalid or malformed token
[INFO] [stdout] [2m2026-05-05T21:22:29.436718Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m401
[INFO] [stdout] test test_jwt_auth_hs256 ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.28s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 8 tests
[INFO] [stdout] test test_keygen ... ok
[INFO] [stdout] test test_validate_invalid_config ... ok
[INFO] [stdout] test test_version ... ok
[INFO] [stdout] test test_init_creates_config ... ok
[INFO] [stdout] test test_hash_key ... ok
[INFO] [stdout] test test_init_fails_if_exists_without_force ... ok
[INFO] [stdout] test test_check_upstream_http_requires_pro ... ok
[INFO] [stdout] test test_validate_valid_config ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.34s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/e2e_cli_tests.rs (/opt/rustwide/target/debug/deps/e2e_cli_tests-331140999c0823b3)
[INFO] [stdout] 
[INFO] [stdout] running 27 tests
[INFO] [stdout] test test_help_command ... ok
[INFO] [stdout] test test_check_upstream_sse_invalid_url ... ok
[INFO] [stdout] test test_hash_key_basic ... ok
[INFO] [stdout] test test_check_upstream_http_invalid_url ... ok
[INFO] [stdout] test test_init_creates_yaml ... ok
[INFO] [stdout] test test_init_creates_toml ... ok
[INFO] [stdout] test test_check_upstream_stdio_command_not_found ... ok
[INFO] [stdout] test test_keygen_basic ... ok
[INFO] [stdout] test test_init_fails_if_exists_without_force ... ok
[INFO] [stdout] test test_init_force_overwrites ... ok
[INFO] [stdout] test test_check_upstream_missing_config ... ok
[INFO] [stdout] test test_run_invalid_config ... ok
[INFO] [stdout] test test_keygen_with_tools ... ok
[INFO] [stdout] test test_run_missing_config ... ok
[INFO] [stdout] test test_keygen_full_options ... ok
[INFO] [stdout] test test_run_help ... ok
[INFO] [stdout] test test_hash_key_consistent ... ok
[INFO] [stdout] test test_keygen_with_rate_limit ... ok
[INFO] [stdout] test test_hash_key_different_inputs ... ok
[INFO] [stdout] test test_keygen_help ... ok
[INFO] [stdout] test test_verbose_flag_validate ... ok
[INFO] [stdout] test test_validate_incomplete_config ... ok
[INFO] [stdout] test test_validate_missing_config ... ok
[INFO] [stdout] test test_validate_valid_config ... ok
[INFO] [stdout] test test_version_command ... ok
[INFO] [stdout] test test_validate_invalid_config ... ok
[INFO] [stderr]      Running tests/http_server_tests.rs (/opt/rustwide/target/debug/deps/http_server_tests-967ad51e5b3d1d63)
[INFO] [stdout] test test_version_shows_features ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 27 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.21s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 21 tests
[INFO] [stdout] [2m2026-05-05T21:22:30.050266Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (1 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.050543Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:37965
[INFO] [stdout] ✓ Auth:       API Keys (1)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:37965/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.052498Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:37965
[INFO] [stdout] [2m2026-05-05T21:22:30.053631Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (1 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.053937Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] [2m2026-05-05T21:22:30.054702Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (1 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.054952Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:33839
[INFO] [stdout] ✓ Auth:       API Keys (1)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:33839/health
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:44661
[INFO] [stdout] ✓ Auth:       API Keys (1)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] [2m2026-05-05T21:22:30.055655Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:33839
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:44661/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.055768Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:44661
[INFO] [stdout] [2m2026-05-05T21:22:30.059755Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (1 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.060452Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (1 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.060695Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] [2m2026-05-05T21:22:30.060944Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (1 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.061002Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] [2m2026-05-05T21:22:30.061348Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:43321
[INFO] [stdout] ✓ Auth:       API Keys (1)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:43321/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.062360Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:43321
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:43497
[INFO] [stdout] ✓ Auth:       API Keys (1)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 25 req/s, burst 10
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:43497/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.062703Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:43497
[INFO] [stdout] [2m2026-05-05T21:22:30.063324Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (1 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.063636Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m CORS enabled with 1 allowed origins
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:42623
[INFO] [stdout] ✓ Auth:       API Keys (1)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:42623/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.064281Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:42623
[INFO] [stdout] [2m2026-05-05T21:22:30.066718Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:37361
[INFO] [stdout] ✓ Auth:       API Keys (1)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:37361/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.067714Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:37361
[INFO] [stdout] [2m2026-05-05T21:22:30.070493Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (1 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.070879Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:41235
[INFO] [stdout] ✓ Auth:       API Keys (1)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:41235/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.072017Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:41235
[INFO] [stdout] [2m2026-05-05T21:22:30.083097Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.083741Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.083759Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.083850Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.084166Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.084210Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.085407Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.086070Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.086243Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.086579Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.087086Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.087338Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m2 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.087459Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.088861Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m2 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.089104Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.090294Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.113744Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.114187Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mOPTIONS [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.114892Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.117046Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.117727Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/unknown/route [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.118244Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/unknown/route [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m404
[INFO] [stdout] [2m2026-05-05T21:22:30.118801Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.119516Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m2 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.119958Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/live [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.120273Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/live [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.119443Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mOPTIONS [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m5 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] test test_health_no_auth_required ... ok
[INFO] [stdout] [2m2026-05-05T21:22:30.121469Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.121786Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.122111Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.122421Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.122742Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.122955Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.123230Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] test test_404_for_unknown_routes ... ok
[INFO] [stdout] test test_cors_headers_present ... ok
[INFO] [stdout] [2m2026-05-05T21:22:30.124348Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m5 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] test test_live_endpoint_returns_minimal_response ... ok
[INFO] [stdout] test test_health_endpoint_returns_json ... ok
[INFO] [stdout] test test_mcp_accepts_application_json ... ok
[INFO] [stdout] [2m2026-05-05T21:22:30.134390Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (1 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.134668Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:39431
[INFO] [stdout] ✓ Auth:       API Keys (1)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:39431/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.135597Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:39431
[INFO] [stdout] [2m2026-05-05T21:22:30.135007Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.139822Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m4 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.140191Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.143000Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (1 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.143206Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:45765
[INFO] [stdout] ✓ Auth:       API Keys (1)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:45765/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.143698Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:45765
[INFO] [stdout] [2m2026-05-05T21:22:30.144129Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (1 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.144358Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:32975
[INFO] [stdout] ✓ Auth:       API Keys (1)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:32975/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.148984Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:32975
[INFO] [stdout] [2m2026-05-05T21:22:30.151229Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (1 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.151534Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] [2m2026-05-05T21:22:30.159144Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (1 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.160847Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:39645
[INFO] [stdout] ✓ Auth:       API Keys (1)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:39645/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.166414Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:39645
[INFO] [stdout] [2m2026-05-05T21:22:30.167766Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.168836Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.169361Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.169660Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.170153Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.171823Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m4 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.172122Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m3 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.172612Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m2 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.172894Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m3 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.173200Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m3 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.123448Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.197774Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:33749
[INFO] [stdout] ✓ Auth:       API Keys (1)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:33749/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.200153Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:33749
[INFO] [stdout] [2m2026-05-05T21:22:30.200384Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m60 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.202197Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.202558Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.203017Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.203332Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.205736Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m8 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.213618Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.214044Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.228016Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] test test_handles_concurrent_requests ... ok
[INFO] [stdout] [2m2026-05-05T21:22:30.228650Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] test test_handles_concurrent_mcp_requests ... ok
[INFO] [stdout] [2m2026-05-05T21:22:30.229706Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.231919Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.233071Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m3 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.233316Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.233747Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.235753Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m3 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.236446Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] test test_mcp_accepts_valid_api_key ... ok
[INFO] [stdout] [2m2026-05-05T21:22:30.240178Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m3 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.240803Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.241163Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.241192Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Authentication failed (detailed) [3merror[0m[2m=[0mInvalid API key
[INFO] [stdout] [2m2026-05-05T21:22:30.241272Z[0m [33m WARN[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Authentication failed [3merror_id[0m[2m=[0m6af2cfce-f3d0-48e4-91d6-6fb8449cb940 [3merror[0m[2m=[0mInvalid API key
[INFO] [stdout] [2m2026-05-05T21:22:30.241456Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m401
[INFO] [stdout] [2m2026-05-05T21:22:30.242359Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.244442Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.245252Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m400
[INFO] [stdout] test test_mcp_rejects_invalid_api_key ... ok
[INFO] [stdout] test test_mcp_echoes_json_rpc_request ... ok
[INFO] [stdout] test test_mcp_rejects_invalid_json ... ok
[INFO] [stdout] [2m2026-05-05T21:22:30.259439Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (1 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.259753Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:44913
[INFO] [stdout] ✓ Auth:       API Keys (1)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:44913/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.262885Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:44913
[INFO] [stdout] [2m2026-05-05T21:22:30.266238Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (1 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.270363Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (1 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.273559Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] [2m2026-05-05T21:22:30.274003Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] [2m2026-05-05T21:22:30.261440Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (1 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.275780Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:37645
[INFO] [stdout] ✓ Auth:       API Keys (1)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:37645/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.277740Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:37645
[INFO] [stdout] [2m2026-05-05T21:22:30.278043Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (1 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.279535Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] [2m2026-05-05T21:22:30.279778Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (1 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.279961Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:41845
[INFO] [stdout] ✓ Auth:       API Keys (1)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:41845/health
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:34931
[INFO] [stdout] ✓ Auth:       API Keys (1)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] [2m2026-05-05T21:22:30.280732Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:41845
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:34931/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.280796Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:34931
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:36187
[INFO] [stdout] ✓ Auth:       API Keys (1)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:36187/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.285987Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:36187
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:36089
[INFO] [stdout] ✓ Auth:       API Keys (1)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:36089/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.286619Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:36089
[INFO] [stdout] [2m2026-05-05T21:22:30.297223Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.297807Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.299388Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.301399Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m2 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] test test_mcp_handles_tools_call_request ... ok
[INFO] [stdout] [2m2026-05-05T21:22:30.342922Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (1 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.343260Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:34867
[INFO] [stdout] ✓ Auth:       API Keys (1)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:34867/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.344707Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:34867
[INFO] [stdout] [2m2026-05-05T21:22:30.353227Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.354059Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.354769Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.354881Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.355053Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.355322Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.356657Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.356800Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.356939Z[0m [33m WARN[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Authentication failed [3merror_id[0m[2m=[0m6d2fdae6-a543-4caa-8034-452c255f6764 [3merror[0m[2m=[0mMissing authorization header
[INFO] [stdout] [2m2026-05-05T21:22:30.357167Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m401
[INFO] [stdout] test test_mcp_requires_authentication ... ok
[INFO] [stdout] [2m2026-05-05T21:22:30.367568Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.368116Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.370812Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.375690Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m4 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] test test_metrics_endpoint_returns_prometheus_format ... ok
[INFO] [stdout] [2m2026-05-05T21:22:30.382952Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.383514Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.384842Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.385100Z[0m [33m WARN[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Authentication failed [3merror_id[0m[2m=[0mfaa3ba11-1a0b-4c8e-bc47-10d6bd35a702 [3merror[0m[2m=[0mMissing authorization header
[INFO] [stdout] [2m2026-05-05T21:22:30.385301Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m401
[INFO] [stdout] test test_mcp_rejects_malformed_authorization_header ... ok
[INFO] [stdout] [2m2026-05-05T21:22:30.419920Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.420979Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.421455Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.422688Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m2 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.423077Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/ready [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.423337Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/ready [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] test test_ready_endpoint_returns_ready_when_initialized ... ok
[INFO] [stdout] [2m2026-05-05T21:22:30.427839Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.437661Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m9 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.447884Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.452932Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m5 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.455541Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.456552Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (1 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.457261Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.457971Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] [2m2026-05-05T21:22:30.461621Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.462556Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:45045
[INFO] [stdout] ✓ Auth:       API Keys (1)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:45045/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.467655Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:45045
[INFO] [stdout] [2m2026-05-05T21:22:30.476652Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.481023Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m124 ms [3mstatus[0m[2m=[0m405
[INFO] [stdout] [2m2026-05-05T21:22:30.481663Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.482083Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] test test_method_not_allowed_for_wrong_http_method ... ok
[INFO] [stdout] [2m2026-05-05T21:22:30.484919Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.485678Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m9 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.486299Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] test test_mcp_accepts_json_with_charset ... ok
[INFO] [stdout] test test_metrics_updates_after_requests ... ok
[INFO] [stdout] [2m2026-05-05T21:22:30.555117Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.555782Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.557697Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.558443Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m400
[INFO] [stderr]      Running tests/mcp_handler_tests.rs (/opt/rustwide/target/debug/deps/mcp_handler_tests-63d5a3b7b91caadb)
[INFO] [stdout] test test_mcp_returns_json_error_response ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 21 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.53s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 22 tests
[INFO] [stdout] [2m2026-05-05T21:22:30.596176Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (3 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.596814Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (3 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.596847Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (3 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.596997Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] [2m2026-05-05T21:22:30.597109Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] [2m2026-05-05T21:22:30.597358Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (3 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.597686Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:43679
[INFO] [stdout] ✓ Auth:       API Keys (3)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:43679/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.597839Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:43679
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:35015
[INFO] [stdout] ✓ Auth:       API Keys (3)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:35015/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.598627Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:35015
[INFO] [stdout] [2m2026-05-05T21:22:30.598894Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:35069
[INFO] [stdout] ✓ Auth:       API Keys (3)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:35069/health
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:43403
[INFO] [stdout] ✓ Auth:       API Keys (3)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:43403/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.599304Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:35069
[INFO] [stdout] [2m2026-05-05T21:22:30.599318Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:43403
[INFO] [stdout] [2m2026-05-05T21:22:30.600300Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (3 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.600914Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] [2m2026-05-05T21:22:30.601059Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (3 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.601414Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:44143
[INFO] [stdout] ✓ Auth:       API Keys (3)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:44143/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.601722Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:44143
[INFO] [stdout] [2m2026-05-05T21:22:30.601905Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (3 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.602155Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:46171
[INFO] [stdout] ✓ Auth:       API Keys (3)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:46171/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.603092Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:46171
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:45375
[INFO] [stdout] ✓ Auth:       API Keys (3)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:45375/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.604691Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:45375
[INFO] [stdout] [2m2026-05-05T21:22:30.609566Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.610121Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.611173Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.611445Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.611623Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.611870Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.612319Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.612613Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.612664Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.612732Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.613038Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.613069Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.616608Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.616833Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.616962Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.617344Z[0m [33m WARN[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Authorization denied for tool call [3midentity_id[0m[2m=[0mreadonly [3mtool[0m[2m=[0mforbidden_tool [3mreason[0m[2m=[0mIdentity 'readonly' is not authorized to call tool 'forbidden_tool'
[INFO] [stdout] [2m2026-05-05T21:22:30.617416Z[0m [33m WARN[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Authorization denied [3merror_id[0m[2m=[0m363b23a0-7917-4258-985f-c53d0d5bfbe1 [3merror[0m[2m=[0mIdentity 'readonly' is not authorized to call tool 'forbidden_tool'
[INFO] [stdout] [2m2026-05-05T21:22:30.617405Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.617681Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.617851Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m403
[INFO] [stdout] [2m2026-05-05T21:22:30.618057Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.618463Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (3 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.618803Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.618844Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] [2m2026-05-05T21:22:30.619166Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m2 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:45021
[INFO] [stdout] ✓ Auth:       API Keys (3)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:45021/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.619423Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:45021
[INFO] [stdout] [2m2026-05-05T21:22:30.619921Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m2 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.620060Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] test test_handles_unicode_in_arguments ... ok
[INFO] [stdout] test test_authorization_error_returns_json_rpc_error ... ok
[INFO] [stdout] [2m2026-05-05T21:22:30.620947Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.621975Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] test test_handles_special_characters_in_path ... ok
[INFO] [stdout] [2m2026-05-05T21:22:30.622747Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] test test_initialized_notification ... ok
[INFO] [stdout] [2m2026-05-05T21:22:30.623619Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.624440Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.624963Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.625399Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.625435Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] test test_admin_can_call_any_tool ... ok
[INFO] [stdout] [2m2026-05-05T21:22:30.635035Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (3 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.635034Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (3 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.635337Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] [2m2026-05-05T21:22:30.635343Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:37393
[INFO] [stdout] ✓ Auth:       API Keys (3)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] 
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] Test with:
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout]   curl http://127.0.0.1:37393/health
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:37673
[INFO] [stdout] ✓ Auth:       API Keys (3)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:37673/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.636644Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:37393
[INFO] [stdout] [2m2026-05-05T21:22:30.636687Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:37673
[INFO] [stdout] [2m2026-05-05T21:22:30.640796Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (3 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.642411Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (3 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.643617Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (3 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.643825Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] [2m2026-05-05T21:22:30.644152Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] [2m2026-05-05T21:22:30.644379Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:33791
[INFO] [stdout] ✓ Auth:       API Keys (3)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:33791/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.657215Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:33791
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:46717
[INFO] [stdout] ✓ Auth:       API Keys (3)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:46717/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.661044Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:46717
[INFO] [stdout] [2m2026-05-05T21:22:30.666790Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m49 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] test test_handles_large_arguments ... ok
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:37885
[INFO] [stdout] ✓ Auth:       API Keys (3)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:37885/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.676993Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:37885
[INFO] [stdout] [2m2026-05-05T21:22:30.691022Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.705080Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m14 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.715440Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.717046Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.719685Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.724171Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m4 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.728238Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] test test_jsonrpc_notification_no_id ... ok
[INFO] [stdout] [2m2026-05-05T21:22:30.732439Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.734071Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.735022Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m7 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] test test_initialize_request ... ok
[INFO] [stdout] [2m2026-05-05T21:22:30.737657Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.738186Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.738911Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.739360Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.741624Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.742034Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.744056Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.745357Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.746262Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.747194Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.748081Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m4 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.749004Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.749425Z[0m [33m WARN[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Authorization denied for tool call [3midentity_id[0m[2m=[0mreadonly [3mtool[0m[2m=[0mlist_directory [3mreason[0m[2m=[0mIdentity 'readonly' is not authorized to call tool 'list_directory'
[INFO] [stdout] [2m2026-05-05T21:22:30.749564Z[0m [33m WARN[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Authorization denied [3merror_id[0m[2m=[0mc3f80778-c29b-4105-8339-073c14cec161 [3merror[0m[2m=[0mIdentity 'readonly' is not authorized to call tool 'list_directory'
[INFO] [stdout] [2m2026-05-05T21:22:30.749722Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m403
[INFO] [stdout] [2m2026-05-05T21:22:30.750067Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.750425Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m3 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] test test_readonly_user_single_tool ... ok
[INFO] [stdout] [2m2026-05-05T21:22:30.751066Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m4 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.751230Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (3 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.751708Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m6 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.752503Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] [2m2026-05-05T21:22:30.753331Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m3 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] test test_jsonrpc_request_with_id ... ok
[INFO] [stdout] test test_prompts_list_request ... ok
[INFO] [stdout] test test_jsonrpc_request_with_string_id ... ok
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:34825
[INFO] [stdout] ✓ Auth:       API Keys (3)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:34825/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.755555Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:34825
[INFO] [stdout] test test_prompts_get_request ... ok
[INFO] [stdout] [2m2026-05-05T21:22:30.758105Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (3 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.759544Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] [2m2026-05-05T21:22:30.759827Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (3 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.760011Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:37441
[INFO] [stdout] ✓ Auth:       API Keys (3)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:37441/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.761900Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:37441
[INFO] [stdout] [2m2026-05-05T21:22:30.766433Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (3 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.766742Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:46567
[INFO] [stdout] ✓ Auth:       API Keys (3)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:46567/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.769847Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:46567
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:37811
[INFO] [stdout] ✓ Auth:       API Keys (3)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:37811/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.770530Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:37811
[INFO] [stdout] [2m2026-05-05T21:22:30.773642Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.773731Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (3 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.774059Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] [2m2026-05-05T21:22:30.774247Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:45293
[INFO] [stdout] ✓ Auth:       API Keys (3)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:45293/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.775569Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:45293
[INFO] [stdout] [2m2026-05-05T21:22:30.776282Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.793281Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m17 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.801564Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (3 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.801848Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:43131
[INFO] [stdout] ✓ Auth:       API Keys (3)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:43131/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.802731Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:43131
[INFO] [stdout] test test_resources_list_request ... ok
[INFO] [stdout] [2m2026-05-05T21:22:30.821923Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (3 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.822157Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:46333
[INFO] [stdout] ✓ Auth:       API Keys (3)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:46333/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.823707Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:46333
[INFO] [stdout] [2m2026-05-05T21:22:30.835800Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (3 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.836507Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] [2m2026-05-05T21:22:30.838078Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (3 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.838270Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.838331Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:44775
[INFO] [stdout] ✓ Auth:       API Keys (3)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:44775/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.838965Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.839017Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:44775
[INFO] [stdout] [2m2026-05-05T21:22:30.840641Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.842100Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] test test_resources_read_request ... ok
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:34181
[INFO] [stdout] ✓ Auth:       API Keys (3)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout] [2m2026-05-05T21:22:30.855753Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.856952Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.859282Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.859452Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.859970Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.860586Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.860951Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.861112Z[0m [33m WARN[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Authorization denied for tool call [3midentity_id[0m[2m=[0mrestricted [3mtool[0m[2m=[0mwrite_file [3mreason[0m[2m=[0mIdentity 'restricted' is not authorized to call tool 'write_file'
[INFO] [stdout] [2m2026-05-05T21:22:30.861190Z[0m [33m WARN[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Authorization denied [3merror_id[0m[2m=[0m39bbf266-f12d-4985-bd56-c2cfcb80ca40 [3merror[0m[2m=[0mIdentity 'restricted' is not authorized to call tool 'write_file'
[INFO] [stdout] [2m2026-05-05T21:22:30.861386Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m2 ms [3mstatus[0m[2m=[0m403
[INFO] [stdout] [2m2026-05-05T21:22:30.861613Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.863271Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.863400Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout]   curl http://127.0.0.1:34181/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.863635Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:34181
[INFO] [stdout] [2m2026-05-05T21:22:30.863690Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.863794Z[0m [33m WARN[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Authorization denied for tool call [3midentity_id[0m[2m=[0mrestricted [3mtool[0m[2m=[0mexecute_command [3mreason[0m[2m=[0mIdentity 'restricted' is not authorized to call tool 'execute_command'
[INFO] [stdout] [2m2026-05-05T21:22:30.863853Z[0m [33m WARN[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Authorization denied [3merror_id[0m[2m=[0m312f9cfa-4917-4106-9ee6-1e10bf7b65cc [3merror[0m[2m=[0mIdentity 'restricted' is not authorized to call tool 'execute_command'
[INFO] [stdout] [2m2026-05-05T21:22:30.863879Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.864024Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m403
[INFO] [stdout] [2m2026-05-05T21:22:30.864080Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] test test_single_request_not_array ... ok
[INFO] [stdout] [2m2026-05-05T21:22:30.864242Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.863445Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.864999Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.865351Z[0m [33m WARN[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Authorization denied for tool call [3midentity_id[0m[2m=[0mrestricted [3mtool[0m[2m=[0mdelete_file [3mreason[0m[2m=[0mIdentity 'restricted' is not authorized to call tool 'delete_file'
[INFO] [stdout] [2m2026-05-05T21:22:30.865403Z[0m [33m WARN[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Authorization denied [3merror_id[0m[2m=[0mc8b47c72-2a92-4a47-9020-02920390a458 [3merror[0m[2m=[0mIdentity 'restricted' is not authorized to call tool 'delete_file'
[INFO] [stdout] [2m2026-05-05T21:22:30.865539Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.865590Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m403
[INFO] [stdout] [2m2026-05-05T21:22:30.866465Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.866770Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] test test_restricted_user_denied_tools ... ok
[INFO] [stdout] [2m2026-05-05T21:22:30.867735Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.867840Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.868083Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m4 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.868606Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] test test_restricted_user_allowed_tools ... ok
[INFO] [stdout] test test_tools_call_with_complex_arguments ... ok
[INFO] [stdout] test test_tools_call_request ... ok
[INFO] [stdout] [2m2026-05-05T21:22:30.913853Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.920057Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.920630Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.922142Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.923749Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] test test_tools_list_with_cursor ... ok
[INFO] [stdout] [2m2026-05-05T21:22:30.925756Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m12 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.930131Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.931424Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] test test_tools_list_request ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 22 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.36s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/rate_limit_tests.rs (/opt/rustwide/target/debug/deps/rate_limit_tests-50277c423c616d3f)
[INFO] [stdout] 
[INFO] [stdout] running 12 tests
[INFO] [stdout] [2m2026-05-05T21:22:30.963627Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (1 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.963929Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:40785
[INFO] [stdout] ✓ Auth:       API Keys (1)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✗ Rate Limit: Disabled
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:40785/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.966158Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:40785
[INFO] [stdout] [2m2026-05-05T21:22:30.967009Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (1 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.967262Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] [2m2026-05-05T21:22:30.967351Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (1 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.967559Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:46825
[INFO] [stdout] ✓ Auth:       API Keys (1)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 2 req/s, burst 3
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:46825/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.968221Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:46825
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:44579
[INFO] [stdout] ✓ Auth:       API Keys (1)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 2 req/s, burst 3
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:44579/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.968559Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:44579
[INFO] [stdout] [2m2026-05-05T21:22:30.969265Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (1 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.969443Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] [2m2026-05-05T21:22:30.970240Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (1 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.970501Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] [2m2026-05-05T21:22:30.972187Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (1 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.974516Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (1 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.974748Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] [2m2026-05-05T21:22:30.975728Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:36767
[INFO] [stdout] ✓ Auth:       API Keys (1)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 2 req/s, burst 3
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:36767/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.976376Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:36767
[INFO] [stdout] [2m2026-05-05T21:22:30.977934Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.978453Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.978521Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.978920Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.978956Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (2 keys)
[INFO] [stdout] [2m2026-05-05T21:22:30.979210Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:43017
[INFO] [stdout] ✓ Auth:       API Keys (2)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:43017/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.979949Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:43017
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:33557
[INFO] [stdout] ✓ Auth:       API Keys (1)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 2 req/s, burst 3
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:33557/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.980721Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:33557
[INFO] [stdout] [2m2026-05-05T21:22:30.981528Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.981560Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.981682Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.981983Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.981989Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.982869Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.982936Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.983138Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.983668Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.983799Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.984010Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.984351Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.984690Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.984909Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.985060Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:46621
[INFO] [stdout] ✓ Auth:       API Keys (1)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 2 req/s, burst 3
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:46621/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.985539Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.985735Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.985829Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.986362Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.986584Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.987188Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.987383Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.986550Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:46621
[INFO] [stdout] test test_burst_allows_initial_requests ... ok
[INFO] [stdout] [2m2026-05-05T21:22:30.987989Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.988181Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.988799Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.988972Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.989612Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.989810Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.990435Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.990657Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.991280Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.991514Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.992122Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.992328Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.993055Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.993258Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:37649
[INFO] [stdout] ✓ Auth:       API Keys (1)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 2 req/s, burst 3
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:37649/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:30.993516Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:37649
[INFO] [stdout] [2m2026-05-05T21:22:30.995704Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.995929Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.996666Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.996888Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.997562Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.997775Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.998436Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.998663Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:30.999293Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:30.999555Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.000185Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.000411Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] test test_health_endpoint_not_rate_limited ... ok
[INFO] [stdout] [2m2026-05-05T21:22:31.002297Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.004200Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m2 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.005379Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.012438Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m7 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.018815Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.029896Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.040522Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m21 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.041921Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.042788Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.043566Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.044207Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.044964Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.045622Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.041045Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m11 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.053508Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.054696Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.055794Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.056766Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.059944Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.064114Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (1 keys)
[INFO] [stdout] [2m2026-05-05T21:22:31.067287Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m7 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.068892Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.071911Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m3 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.074753Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] [2m2026-05-05T21:22:31.075450Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.075957Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0m01a6c28e-dcd2-43f2-9fdc-13cc568b611a [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.076197Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:38269
[INFO] [stdout] ✓ Auth:       API Keys (1)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 2 req/s, burst 3
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:38269/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:31.078686Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:38269
[INFO] [stdout] [2m2026-05-05T21:22:31.080235Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.080587Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.080742Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.082086Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (1 keys)
[INFO] [stdout] [2m2026-05-05T21:22:31.082271Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.083699Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.083964Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.084392Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.084605Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.085456Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.086077Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.086196Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.086771Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0m6388af4b-a5be-49c9-858c-d45245961c3b [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.086800Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.086973Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m7 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.086992Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.087571Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.087718Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.087725Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.087946Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.088203Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.088350Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.088634Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.089024Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.089351Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.089388Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] [2m2026-05-05T21:22:31.090079Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.090089Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.090707Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.090736Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.091463Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.091727Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.091966Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.092070Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0ma65589d0-4eec-4f27-8d73-fd9628f9f45f [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.092199Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.092248Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.092664Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.092985Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.093639Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.093871Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m6 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.094096Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.094380Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.094798Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.094864Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.095129Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.095193Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0ma6e4a144-60c4-4874-9ffa-2d181f138ff3 [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.095366Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.095846Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.096147Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.096591Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.096850Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.097407Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.098070Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.098268Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:32867
[INFO] [stdout] ✓ Auth:       API Keys (1)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 2 req/s, burst 3
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:32867/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:31.098803Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:32867
[INFO] [stdout] [2m2026-05-05T21:22:31.098883Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.098958Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.099617Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.100239Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.100317Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.100505Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.100981Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.101185Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.101790Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.102450Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.102649Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.103296Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.103290Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.103664Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.103810Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.104586Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.104569Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0m0233c94e-2b50-4cd0-acdd-c59b84655834 [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.104802Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m4 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.105277Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.105967Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.106726Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.107322Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.107435Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.108153Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.104465Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.108866Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.109125Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m4 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.109661Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.110427Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.111060Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.111085Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m7 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.111217Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.111696Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0m718da0b6-150c-49c9-b2e2-9a07647f651c [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.111881Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.111897Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m4 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.111936Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.112698Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.113046Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m9 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.113347Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.113869Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.114113Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.114860Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.115128Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0m21e76a48-2f6d-4702-ad80-4d10a5a35978 [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.115280Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.115906Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m4 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.115966Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.116233Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0mf0d67baa-2497-42b0-a98a-7765499c8568 [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.116387Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.116494Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.117141Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.117338Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.117415Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0m5b331335-2812-469c-8aa1-816ea438cea6 [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.117628Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.117930Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.118275Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.118270Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0me49ffdf3-83f9-4cdc-ae55-35762deffb94 [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.118619Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0mae1514c0-2190-4c7e-81e6-9432ae343bf9 [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.118769Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.119339Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.119464Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.118454Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.119740Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0m98f122f6-f168-4321-8175-a167bf669955 [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.119884Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.120597Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.120874Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0mdbb7932c-03c3-4be4-baf9-3e432711a1e4 [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.121023Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.121698Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m18 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.121829Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.121873Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m8 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.122080Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0m5b987871-ffee-41af-be68-d44eedf8e7e0 [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.122223Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.122373Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m3 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.122953Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.123204Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0ma0f1328e-fefd-4485-996c-f29acf60c540 [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.123351Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] test test_rate_limit_blocks_excess_requests ... ok
[INFO] [stdout] [2m2026-05-05T21:22:31.124103Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.124115Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.124364Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0m279f4210-b4cf-45b8-91ec-b32761e12e3e [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.124526Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.124927Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.125234Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.125537Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0m2293301d-a155-4214-8a54-5502e6e7cdd8 [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.125644Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.125682Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.126362Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.126548Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.126679Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0md355d1ef-09fd-4681-b8d2-8aee714d9fad [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.126822Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.126892Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m9 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.127272Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.127621Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.127673Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0mc9559f7c-260e-4d51-9e46-5291c881c724 [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.127836Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.127870Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0m28ce955e-93a2-4db9-94db-76cfefdc62de [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.128026Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.128759Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.129007Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0mb8ddf5fa-1c94-4078-a987-929096f95452 [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.129161Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] test test_rate_limit_returns_429_status ... ok
[INFO] [stdout] [2m2026-05-05T21:22:31.129890Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.130149Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0m14eecd55-ebb5-4df7-9475-92b92d709de4 [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.130292Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.131049Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.131053Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.131325Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0m1f38af5a-3576-4758-a640-0ff7ab1c543a [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.131523Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.132220Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.132552Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0m87b7a87e-de2f-4d79-8339-e2071e4c166c [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.132705Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.134112Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.134376Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0m96b78304-5b51-4655-9785-68a0e9e9521b [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.134578Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.134849Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.136152Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.136456Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0maa26f6e1-d91c-45e9-8812-e86d15a9ee31 [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.136643Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.137761Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.138179Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.138269Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.138467Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0ma44fa9e7-c099-4e82-a75d-90481c4d8a25 [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.139663Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] test test_per_user_rate_limit_override ... ok
[INFO] [stdout] [2m2026-05-05T21:22:31.144625Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (1 keys)
[INFO] [stdout] [2m2026-05-05T21:22:31.144831Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:35603
[INFO] [stdout] ✓ Auth:       API Keys (1)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 2 req/s, burst 3
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:35603/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:31.145742Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:35603
[INFO] [stdout] [2m2026-05-05T21:22:31.147424Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m12 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.151065Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.154013Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m15 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.154905Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.158999Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m28 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.159960Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m22 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.160774Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.163008Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m2 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.163781Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.165657Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.166379Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.170157Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m15 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.171826Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.172889Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m6 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.176867Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] test test_rate_limit_allows_requests_within_limit ... ok
[INFO] [stdout] [2m2026-05-05T21:22:31.179462Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.179749Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m2 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.181001Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.182041Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.182817Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.183151Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0mac81880f-e7d8-443c-ac20-6bde1fd7abe5 [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.183345Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.183360Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m32 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.185425Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.186762Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m14 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.186805Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.187607Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.188071Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.188369Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] test test_rate_limit_includes_retry_after_header ... ok
[INFO] [stdout] [2m2026-05-05T21:22:31.189011Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.189067Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.189851Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.190267Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m2 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.190437Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.190619Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.190975Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.191144Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.191142Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.191280Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0mf9545915-52a3-4833-8a1e-036f93462b35 [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.191441Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0m05972efc-e4f9-4b9f-be1e-303d33a71ede [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.191547Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.191639Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.191868Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.191938Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.192162Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.192141Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0mb726abdd-e665-489d-b2ce-ed6377ce1ec5 [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.192215Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0m33921adc-60d2-4bf5-9b9b-9ce72b9e8411 [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.192309Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.192384Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.192753Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.192891Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0me19c710d-c509-4425-b290-e63b2509bbee [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.193063Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.193272Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.193579Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0mdfdafa0c-f2a9-47c9-87f5-d180ab080467 [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.193749Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.194068Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.194158Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.194362Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0m2ba420e3-16e3-4f13-b94d-11e54eb2498f [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.194916Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.194951Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.195195Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0mdc6f868c-1481-4ec3-989d-2ef49ae686b3 [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.195384Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.195564Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.195706Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.196321Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.196455Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.196837Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.197148Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0ma6f66dd7-9699-49cc-8112-3f0b942f9ca4 [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.197194Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.197341Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.197646Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0m2d4ce4c5-9795-4ab2-a7a5-c465dfdbf7ed [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.197823Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.197931Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.198669Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.199020Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.199294Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0me1a75575-1c85-4d82-857b-e3925f94038f [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.199381Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.199457Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.200070Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.200223Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.200558Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0m2f79ca3f-cb1b-4a5e-a2ad-622cd9c7e524 [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.200715Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.200786Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.201421Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.201553Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.201716Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0m96a3f7d2-1b60-4e5a-bf5c-79def2b0a63e [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.201875Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.202251Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.202596Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.202585Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (2 keys)
[INFO] [stdout] [2m2026-05-05T21:22:31.202849Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0m5c915b70-3a70-4cbb-9b42-7f53b6b6b398 [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.202936Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] [2m2026-05-05T21:22:31.203002Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.203001Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.203753Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.204400Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.204542Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m15 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.204895Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m[1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m14 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.205172Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.205915Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.206691Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.206765Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m16 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.207415Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.208178Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.208887Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.209570Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.209594Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m30 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.210232Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.210970Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.211747Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.212492Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.213155Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.213917Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.214638Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.215397Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.216158Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.216935Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.217720Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.218442Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.219189Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.220007Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.220794Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:43969
[INFO] [stdout] ✓ Auth:       API Keys (2)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:43969/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:31.221020Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:43969
[INFO] [stdout] [2m2026-05-05T21:22:31.221582Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.222291Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.223090Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.223871Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.224612Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.225341Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.225716Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.226115Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.226891Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.227649Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.228369Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.229141Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.229892Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.230676Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.231415Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.232171Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] test test_rate_limit_under_concurrent_load ... ok
[INFO] [stdout] [2m2026-05-05T21:22:31.232909Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.233393Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.233690Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.233884Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.234412Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.234660Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m8 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.235187Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.235267Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.235428Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.235949Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.236462Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.236698Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.237199Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.237361Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.237511Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0me12ba136-49e9-4f64-bfa2-90a0f76c2f4d [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.237666Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.237668Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m2 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.238018Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.238277Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.238397Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.238700Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0mece3062d-e39b-48ea-8286-2a49cc3cef27 [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.238723Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.238861Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.239535Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.239573Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.239832Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0m0d866df3-339e-4cda-8302-f1a4b99b8223 [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.239985Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.240170Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.240223Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.240748Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.240898Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.240903Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.241004Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0m4e96d297-1b17-4bbf-b3f5-f619c5427312 [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.241167Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.241603Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.241920Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.242180Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0m098992ea-99ff-461c-8a16-6f56d9cf7d85 [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.242226Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.242334Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.242903Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.242990Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m2 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.243044Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.243287Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0m4e78007d-337f-480f-9b3c-c1de8e52ff67 [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.243443Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.243597Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] test test_metrics_endpoint_not_rate_limited ... ok
[INFO] [stdout] [2m2026-05-05T21:22:31.244172Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.244268Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.244440Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0m7531e3c3-8b50-4a80-9bd0-44dfccf6fd76 [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.244645Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.244955Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:31.245317Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] test test_rate_limit_disabled_allows_all_requests ... ok
[INFO] [stdout] [2m2026-05-05T21:22:31.245607Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0m45fdc0b5-9315-4a96-a35d-9cc44c22d7c7 [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.245757Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.246448Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.246731Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Rate limit exceeded [3merror_id[0m[2m=[0m56034ff5-e8c4-425d-964c-d877f4021d54 [3mretry_after[0m[2m=[0m1
[INFO] [stdout] [2m2026-05-05T21:22:31.246885Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m429
[INFO] [stdout] [2m2026-05-05T21:22:31.247599Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:31.248567Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] test test_rate_limits_are_per_identity ... ok
[INFO] [stdout] [2m2026-05-05T21:22:33.205599Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:33.206595Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] test test_rate_limit_recovers_over_time ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.26s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/routing_tests.rs (/opt/rustwide/target/debug/deps/routing_tests-67a5467646c7a8a2)
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/server_tests.rs (/opt/rustwide/target/debug/deps/server_tests-f6447547c0074f71)
[INFO] [stdout] 
[INFO] [stdout] running 3 tests
[INFO] [stdout] [2m2026-05-05T21:22:33.252224Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (1 keys)
[INFO] [stdout] [2m2026-05-05T21:22:33.252681Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:42329
[INFO] [stdout] ✓ Auth:       API Keys (1)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:42329/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:33.253674Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:42329
[INFO] [stdout] [2m2026-05-05T21:22:33.263405Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:33.263946Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:33.266073Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] {"timestamp":"2026-05-05T21:22:33.266430249Z","event_type":"auth_success","identity_id":"test-client","method":null,"tool":null,"success":true,"message":null,"duration_ms":null,"request_id":null}
[INFO] [stdout] [2m2026-05-05T21:22:33.267313Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] test test_mcp_auth_success ... ok
[INFO] [stdout] [2m2026-05-05T21:22:33.273803Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (1 keys)
[INFO] [stdout] [2m2026-05-05T21:22:33.282874Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:42525
[INFO] [stdout] ✓ Auth:       API Keys (1)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:42525/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:33.293840Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:42525
[INFO] [stdout] [2m2026-05-05T21:22:33.300467Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Enabling API key authentication (1 keys)
[INFO] [stdout] [2m2026-05-05T21:22:33.308849Z[0m [32m INFO[0m [2mmcp_guard[0m[2m:[0m Using stdio transport [3mcommand[0m[2m=[0m/opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] 
[INFO] [stdout] ╭──────────────────────────────────────────────╮
[INFO] [stdout] │  MCP Guard v1.0.0                            │
[INFO] [stdout] ╰──────────────────────────────────────────────╯
[INFO] [stdout] 
[INFO] [stdout] ✓ Server:     http://127.0.0.1:34775
[INFO] [stdout] ✓ Auth:       API Keys (1)
[INFO] [stdout] ✓ Transport:  stdio → /opt/rustwide/workdir/tests/fixtures/echo_server.sh
[INFO] [stdout] ✓ Rate Limit: 100 req/s, burst 50
[INFO] [stdout] ✓ Audit:      Enabled
[INFO] [stdout] 
[INFO] [stdout] Ready for requests!
[INFO] [stdout] 
[INFO] [stdout] Test with:
[INFO] [stdout]   curl http://127.0.0.1:34775/health
[INFO] [stdout] 
[INFO] [stdout] [2m2026-05-05T21:22:33.310756Z[0m [32m INFO[0m [2mmcp_guard_core::server[0m[2m:[0m MCP Guard listening on 127.0.0.1:34775
[INFO] [stdout] [2m2026-05-05T21:22:33.370691Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:33.371212Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:33.371486Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:33.371926Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m1 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:33.380320Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:33.380320Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:33.380659Z[0m [33m WARN[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m[1mhttp_request[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp[1m}[0m[2m:[0m [2mmcp_guard_core::server[0m[2m:[0m Authentication failed [3merror_id[0m[2m=[0me89e2052-f55e-4f65-82d1-b6461e4b6e82 [3merror[0m[2m=[0mMissing authorization header
[INFO] [stdout] [2m2026-05-05T21:22:33.380936Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mPOST [3muri[0m[2m=[0m/mcp [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m401
[INFO] [stdout] [2m2026-05-05T21:22:33.383879Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/health [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m3 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] test test_mcp_auth_rejection ... ok
[INFO] [stdout] [2m2026-05-05T21:22:33.385703Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/live [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:33.385927Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/live [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:33.389774Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/ready [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:33.390257Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/ready [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m0 ms [3mstatus[0m[2m=[0m200
[INFO] [stdout] [2m2026-05-05T21:22:33.395779Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_request[0m[2m:[0m started processing request
[INFO] [stdout] [2m2026-05-05T21:22:33.399113Z[0m [34mDEBUG[0m [1mrequest[0m[1m{[0m[3mmethod[0m[2m=[0mGET [3muri[0m[2m=[0m/metrics [3mversion[0m[2m=[0mHTTP/1.1[1m}[0m[2m:[0m [2mtower_http::trace::on_response[0m[2m:[0m finished processing request [3mlatency[0m[2m=[0m3 ms [3mstatus[0m[2m=[0m200
[INFO] [stderr]      Running tests/transport_integration_tests.rs (/opt/rustwide/target/debug/deps/transport_integration_tests-18b3c24a639c1549)
[INFO] [stdout] test test_health_endpoints ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.17s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 2 tests
[INFO] [stdout] test test_stdio_transport_bad_command ... ok
[INFO] [stdout] test test_stdio_transport_echo ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "c56a6c9c988d09b9ac8a9c986de86ebe8e4cc2ab98062fcb9702c1dc59642232", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "c56a6c9c988d09b9ac8a9c986de86ebe8e4cc2ab98062fcb9702c1dc59642232", kill_on_drop: false }`
[INFO] [stdout] c56a6c9c988d09b9ac8a9c986de86ebe8e4cc2ab98062fcb9702c1dc59642232
